import getTreePropsDescrible from '../../utils/tree-props-desc';
import getRequestConfigDescrible from '../../utils/request-config-desc';

export default {
    attributes: [
        {
            params: 'v-model',
            des: '是否显示 tree-picker 树选择器',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        },
        {
            params: 'title',
            des: '弹窗标题',
            type: 'String',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'width',
            des: '弹窗宽度',
            type: 'String | Number',
            values: '-',
            defaultVal: '500px',
        },
        {
            params: 'height',
            des: '树高度',
            type: 'Number',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'selection',
            des: '设置默认选中；该属性为节点数据 data 组成的数组，或者为节点对应的 node-key 组成的数组；注意：若节点未启用勾选，且传入了 selection， 那么只有 selection 的第一个元素对应的节点会被选中并且高亮展示。',
            type: 'Array',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'required',
            des: '点击确认时是否校验必须至少选择一条数据',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        },
        {
            params: 'confirm-text',
            des: '弹窗提交按钮文案',
            type: 'String',
            values: '-',
            defaultVal: '"确认"',
        },
        {
            params: 'cancel-text',
            des: '弹窗取消按钮文案',
            type: 'String',
            values: '-',
            defaultVal: '"取消"',
        },
        {
            params: 'show-checkbox',
            des: '节点是否展示复选框，支持多选',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        },
        {
            params: 'is-leaf-only',
            des: '在点击确认时，获取的节点数据是否只含叶子节点；false 表示包含全部已勾选的节点',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        },
        {
            params: 'include-half-checked',
            des: '在点击确认时，获取的节点数据是否包含半选节点节点(仅 show-checkbox 为 true 有效)',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        },
        {
            params: 'check-leaf-tips',
            des: '单选情况下（show-checkbox 为 false），且配置了 isLeafOnly 为 true（仅支持选择叶子节点），那么该字段可用于配置校验不通过的提示文案',
            type: 'String',
            values: '-',
            defaultVal: '"仅支持选择叶子节点，请重新选择"',
        },
        {
            params: 'filterable',
            des: '是否启用筛选；在 filter-by-front 不为 false 的情况下，组件内部的筛选均为前台筛选(前台根据节点名称模糊匹配)。 你也可以使用 filter-node-method 来自定义前台筛选节点的方法',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        },
        {
            params: 'filter-placeholder',
            des: '筛选框占位文字',
            type: 'String',
            values: '-',
            defaultVal: '\'输入关键字进行过滤\'',
        },
        {
            params: 'filter-button-text',
            des: '当配置 filter-by-front 为 false 时，会展示筛选按钮，该配置可以指定筛选按钮的文案',
            type: 'String',
            values: '-',
            defaultVal: '"查询"',
        },
        {
            params: 'filter-by-front',
            des: '是否为前端根据节点名称模糊匹配进行筛选，设置为 false 时，将禁用前端模糊筛选，并在点击查询按钮时抛出 search 回调方法',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'true',
        },
        {
            params: 'filter-node-method',
            des: '自定义组件内节点筛选规则，返回 true 表示这个节点可以显示，返回 false 则表示这个节点会被隐藏',
            type: 'Function(value, data, node)',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'request-config',
            des: '通过接口请求树数据的配置；详情请查阅下方说明',
            type: 'Object',
            values: '-',
            defaultVal: '-',
            details: [
                {
                    title: '配置项【request-config】',
                    describes: [
                        '除以下字段外，request-config 还支持传入axios的所有可配置参数，详细配置说明请查阅 https://github.com/axios/axios#request-config',
                    ],
                    configList: getRequestConfigDescrible('tree'),
                },
            ],
        },
        {
            params: 'data',
            des: '树数据',
            type: 'Array',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'empty-text',
            des: '内容为空的时候展示的文案',
            type: 'String',
            values: '-',
            defaultVal: '"暂无数据"',
        },
        {
            params: 'node-key',
            des: '树节点的唯一键，组件内部默认为 "id"',
            type: 'String',
            values: '-',
            defaultVal: '"id"',
        },
        {
            params: 'props',
            des: '配置选项，具体看下表',
            type: 'Object',
            values: '-',
            defaultVal: '-',
            details: [
                {
                    title: '配置项【props】',
                    describes: ['用于指定树节点相关功能性字段对应的字段编码'],
                    configList: getTreePropsDescrible(),
                },
            ],
        },
        {
            params: 'render-after-expand',
            des: '是否在第一次展开某个树节点后才渲染其子节点',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'true',
        },
        {
            params: 'highlight-current',
            des: '是否高亮当前选中节点',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'true',
        },
        {
            params: 'default-expand-all',
            des: '是否默认展开所有节点',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'true',
        },
        {
            params: 'check-on-click-node',
            des: '若节点可勾选，是否在点击节点的时候选中节点，默认值为 false，即只有在点击复选框时才会选中节点。',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        },
        {
            params: 'default-expanded-keys',
            des: '默认展开的节点；属性值为节点对应的 node-key 组成的数组',
            type: 'Array',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'check-strictly',
            des: '在显示复选框的情况下，是否严格的遵循父子不互相关联的做法',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        },
        {
            params: 'accordion',
            des: '是否每次只打开一个同级树节点展开（手风琴模式）',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        },
        {
            params: 'indent',
            des: '树节点缩进',
            type: 'Number',
            values: '-',
            defaultVal: '18',
        },
        {
            params: 'icon',
            des: '自定义树节点的图标',
            type: 'String | Component',
            values: '-',
            defaultVal: '-',
        },
    ],
    events: [
        {
            name: 'confirm',
            des: '选中数据行后点击提交',
            params: '(rows)',
        },
        {
            name: 'cancel',
            des: '弹窗关闭触发的事件',
            params: '-',
        },
        {
            name: 'clear',
            des: '点击清空按钮抛出的事件',
            params: '-',
        },
    ],
    slots: [
        {
            name: '-',
            des: '默认插槽，可以自定义节点内容',
            params: '{ node, data }',
        },
        {
            name: 'empty',
            des: '当数据为空时自定义的内容',
            params: '-',
        },
    ],
    refs: [
        {
            name: 'clear',
            des: '清空当前选中的节点',
            params: '-',
            return: '-',
        },
    ],
};
